package top.fangwenmagician.calculationstring.operator;

import top.fangwenmagician.calculationstring.ProcessControl;

/**
 * 运算符接口，每一个运算符都应该实现该接口。
 */
public interface I_Operator {
    /**
     * 运算符优先级，数字越大优先级越高，+-是50，* /是100，()是127
     *
     * @return 运算符优先级
     */
    int priority() throws Exception;

    /**
     * 校验表达式中是否存在运算符
     *
     * @param expression 表达式
     * @return 是否存在运算符
     */
    boolean isExist(String expression) throws Exception;

    /**
     * 同级优先度<br />
     * 在和相同优先级的运算符一起计算时，运算符的同级优先度越大，越先计算<br />
     * 建议通过输入的表达式，动态调整同级优先度
     *
     * @param expression 表达式
     * @return 返回同级优先度
     */
    int peerPriority(String expression) throws Exception;

    /**
     * 计算表达式
     *
     * @param expression 表达式
     * @return 计算完成并完成替换的表达式
     */
    String calculation(String expression, ProcessControl processControl) throws Exception;
}
